<?php
namespace yunj\control\field;

abstract class YunjField {

    protected $requireArgs=[
        'type' => 'text',        // 类型（默认text）
        'title' => '',           // 标题（可选）
        'value' => '',           // 值（可选，如：['read']）
        'verify'=>'',            // 验证方法（可选，例：'require|mobile'，必填且为手机格式）
        'desc'=>'',              // 描述（可选）
    ];

    // 字段key
    protected $key;

    // 字段配置
    protected $args;

    /**
     * Notes: 设置属性
     * Author: Uncle-L
     * Date: 2020/8/18
     * Time: 10:10
     * @param $key
     * @param $args
     * @return $this
     */
    public function setAttr($key,$args){
        $this->key=$key;
        $this->setArgs($args);
        return $this;
    }

    /**
     * Notes: 设置字段配置
     * Author: Uncle-L
     * Date: 2020/8/10
     * Time: 12:14
     * @param $args
     */
    final protected function setArgs($args){
        $args = array_supp($args, $this->defineExtraArgs()+$this->requireArgs);
        $args = $this->handleArgs($args);
        $this->args=$args;
    }

    /**
     * Notes: 定义额外参数
     * Author: Uncle-L
     * Date: 2020/12/3
     * Time: 10:19
     */
    protected function defineExtraArgs(){
        return [];
    }

    /**
     * Notes: 处理 args
     * Author: Uncle-L
     * Date: 2020/12/3
     * Time: 10:22
     * @param $args
     * @return mixed
     */
    protected function handleArgs($args){
        return $args;
    }

    /**
     * Notes: 返回字段配置
     * Author: Uncle-L
     * Date: 2020/8/10
     * Time: 12:13
     * @return mixed
     */
    public function args(){
        return $this->args;
    }

}